summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-02-07 21:06:15 +0100
committerLiam <byteslice@airmail.cc>2024-02-07 21:06:15 +0100
commitfee263c59c2eaf987f750768548f1cc6aa491d3c (patch)
treea52053ea84facff57155fa08e078082bde15a446
parentMerge pull request #12883 from FernandoS27/memory_manager_mem (diff)
downloadyuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar.gz
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar.bz2
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar.lz
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar.xz
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.tar.zst
yuzu-fee263c59c2eaf987f750768548f1cc6aa491d3c.zip
-rw-r--r--src/core/hle/service/cmif_serialization.h2
-rw-r--r--src/core/hle/service/cmif_types.h10
-rw-r--r--src/core/hle/service/hle_ipc.cpp8
3 files changed, 16 insertions, 4 deletions
diff --git a/src/core/hle/service/cmif_serialization.h b/src/core/hle/service/cmif_serialization.h
index e985fe317..f24682c34 100644
--- a/src/core/hle/service/cmif_serialization.h
+++ b/src/core/hle/service/cmif_serialization.h
@@ -280,7 +280,7 @@ void ReadInArgument(bool is_domain, CallArguments& args, const u8* raw_data, HLE
u32 value{};
std::memcpy(&value, raw_data + ArgOffset, ArgSize);
- std::get<ArgIndex>(args) = ctx.GetDomainHandler<ArgType::Type>(value - 1);
+ std::get<ArgIndex>(args) = ctx.GetDomainHandler<typename ArgType::element_type>(value - 1);
return ReadInArgument<MethodArguments, CallArguments, ArgAlign, ArgEnd, HandleIndex, InBufferIndex, OutBufferIndex, true, ArgIndex + 1>(is_domain, args, raw_data, ctx, temp);
} else if constexpr (ArgumentTraits<ArgType>::Type == ArgumentType::InCopyHandle) {
diff --git a/src/core/hle/service/cmif_types.h b/src/core/hle/service/cmif_types.h
index 84f4c2456..db5a013c7 100644
--- a/src/core/hle/service/cmif_types.h
+++ b/src/core/hle/service/cmif_types.h
@@ -65,6 +65,14 @@ struct ClientProcessId {
};
struct ProcessId {
+ explicit ProcessId() : pid() {}
+ explicit ProcessId(u64 p) : pid(p) {}
+ /* implicit */ ProcessId(const ClientProcessId& c) : pid(c.pid) {}
+
+ bool operator==(const ProcessId& rhs) const {
+ return pid == rhs.pid;
+ }
+
explicit operator bool() const {
return pid != 0;
}
@@ -291,4 +299,4 @@ private:
};
// clang-format on
-} // namespace Service \ No newline at end of file
+} // namespace Service
diff --git a/src/core/hle/service/hle_ipc.cpp b/src/core/hle/service/hle_ipc.cpp
index 50e1ed756..e0367e774 100644
--- a/src/core/hle/service/hle_ipc.cpp
+++ b/src/core/hle/service/hle_ipc.cpp
@@ -299,8 +299,12 @@ Result HLERequestContext::WriteToOutgoingCommandBuffer() {
if (GetManager()->IsDomain()) {
current_offset = domain_offset - static_cast<u32>(outgoing_domain_objects.size());
for (auto& object : outgoing_domain_objects) {
- GetManager()->AppendDomainHandler(std::move(object));
- cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount());
+ if (object) {
+ GetManager()->AppendDomainHandler(std::move(object));
+ cmd_buf[current_offset++] = static_cast<u32_le>(GetManager()->DomainHandlerCount());
+ } else {
+ cmd_buf[current_offset++] = 0;
+ }
}
}